package com.gxa.community.admin.controller.goods;


import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.gxa.community.admin.service.goods.impl.GoodsInfoServiceImpl;
import com.gxa.community.core.pojo.domain.goodsdo.GoodsInfo;
import com.gxa.community.core.pojo.dto.goods.GoodsInfoDto;
import com.gxa.community.core.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * <p>
 * 商品信息表 前端控制器
 * </p>
 *
 * @author gxa
 * @since 2022-07-18
 */
@RestController
@Slf4j
@Validated
@RequestMapping("/goods")
public class GoodsInfoController {
    @Autowired
    GoodsInfoServiceImpl goodsInfoService;

    /**
     * 修改信息调用修改接口
     * @param id
     * @return
     */
    @GetMapping("/aloneQuery")
    public R aloneQuery (@NotNull(message = "不能为空") Integer id){
        return goodsInfoService.aloneQuery(id);
    }

    /**
     * 查询所有属性
     * 未被禁用的
     * 新增,修改
     * @return
     */
    @GetMapping("/querys")
    public R classTag(){
       return goodsInfoService.classTag();
    }

    /**
     * 批量删除接口
     * @param id
     * @return
     */
    @DeleteMapping("/del")
    public R del(@NotNull(message = "不能为空") Integer... id){
        log.info("商品接口:=============={}",id);
        return goodsInfoService.del(id);
    }

    /**
     * 新增商品接口
     * @param goodsInfo
     * @param nameId
     * @return R
     */
    @PostMapping("/add")
    public R add(@RequestBody @Validated(GoodsInfo.add.class) GoodsInfo goodsInfo,
                 @NotNull(message = "操作人id不能未空") Integer nameId){
        log.info("商品接口:=====接受到的是{}========={}",nameId,goodsInfo);
       return goodsInfoService.add(goodsInfo,nameId);
    }

    /**
     * 获取商品数据接口
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/query")
    public R query(@NotNull(message = "type不能为空") Integer type,
                   @NotNull(message = "page不能为空") Integer page,
                   @NotNull(message = "sizs不能为空") Integer size){
        return goodsInfoService.query(type,page, size);
    }

    /**
     * 修改商品接口
     * @param goodsInfo
     * @param nameId
     * @return
     */
    @PutMapping("/edit")
    public R edit(@RequestBody @Validated({GoodsInfo.add.class,GoodsInfo.edit.class}) GoodsInfo goodsInfo,
                  @NotNull(message = "操作人id不能未空") Integer nameId){
        return goodsInfoService.edit(goodsInfo,nameId);
    }

    /**
     * 修改商品状态
     * @param id
     * @param status
     * @return
     */
    @PutMapping("/editStatus")
    public R editStatus(@NotNull(message = "id不能为空") Integer id,
                        @NotNull(message = "状态码不能为空") Integer status) {
        UpdateWrapper wrapper = new UpdateWrapper<>();
        wrapper.eq("id",id);
        wrapper.set("status",status);
        boolean b = goodsInfoService.update(null, wrapper);
        if (b){
            return R.ok();
        }
        return R.error();
    }

    /**
     * 条件搜索
     * @param name 根据商品名称搜索
     * @param tag   标签
     * @param classs 类型
     * @param mini 库存最小
     * @param max 库存最大
     * @param page 分页
     * @param size 分页
     * @return R
     */
    @GetMapping("/seek")
//    public R seek (@NotEmpty(message = "搜索内容不能为空") String name,
//                   @NotNull(message = "tag不能为空") Integer tag,
//                   @NotNull(message = "classs不能为空") Integer classs,
//                   @NotNull(message = "mini不能为空") Integer mini,
//                   @NotNull(message = "max不能为空") Integer max ,
//                   @NotNull(message = "page不能为空") Integer page,
//                   @NotNull(message = "size不能为空") Integer size){
//        return goodsInfoService.seek(name, tag, classs, mini, max,page,size);
//    }
    public R seek (String name,
                   String tag,
                   String classs,
                   String mini,
                   String max ,
                   String status,
                   @NotNull(message = "page不能为空") Integer page,
                   @NotNull(message = "size不能为空") Integer size){
        log.info("搜索框的值是={}={}={}={}={}={}={}=",name, tag, classs, mini, max,page,size);
        return goodsInfoService.seek(name, tag, classs, mini, max,status,page,size);
    }

    /**
     * 生成商品id
     * @return
     */
    @GetMapping("/id")
    public R ids(){
        long id = IdWorker.getId();
        return R.ok("SP"+id);
    }

}

